package br.ufrn.engcomp.arq.negocio;
/**
 * 
 * @author Claudio
 *
 */
import java.util.List; 

import br.ufrn.engcomp.arq.dao.GenericDAO;
import br.ufrn.engcomp.arq.dominio.Entidade;
import br.ufrn.engcomp.arq.exceptions.NegocioException;
import br.ufrn.engcomp.arq.exceptions.DAOException;
import br.ufrn.engcomp.arq.messages.MessagesControl;
import br.ufrn.engcomp.arq.messages.MessagesWeb;
import br.ufrn.engcomp.arq.negocio.validacao.RequiredFieldValidation;


public class AbstractProcessador<E extends Entidade> implements IAbstractProcessador<E> { 
	private GenericDAO<E> persistence; 
	private RequiredFieldValidation validator; 
	private MessagesControl messages; 
	
	public AbstractProcessador() { 
		persistence = new GenericDAO<E>(); 
		validator = new RequiredFieldValidation(); 
		messages = new MessagesWeb(); 
	} 
	
	public boolean create(E entidade) throws DAOException,NegocioException { 
		if (!validator.isEmpty(entidade)) { 
			return persistence.create(entidade); 
		} else {
			List<String> emptyFields = validator.getEmptyFields(); 
			for (int i = 0; i < emptyFields.size(); i++) { 
				messages.addMessage(emptyFields.get(i)); 
			} 
		} 
		return false; 
	} 
	
	public boolean update(E entidade) throws DAOException,NegocioException { 
		if (!validator.isEmpty(entidade)) { 
			return persistence.update(entidade); 
		} else { 
			List<String> emptyFields = validator.getEmptyFields(); 
			for (int i = 0; i< emptyFields.size(); i++) { 
				messages.addMessage("erro_field_" + emptyFields.get(i)); 
			}
		}
		return false;
	} 

	public boolean delete(E entidade) throws DAOException,NegocioException { 
		return persistence.delete(entidade); 
	} 
	
	public List<E> findAll(E entidade) throws DAOException,NegocioException {
		return persistence.findAll(entidade);
	}
}
